package cn.itcast.bos.web.action;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.TimeUnit;

import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import javax.ws.rs.core.MediaType;

import org.apache.commons.lang3.RandomStringUtils;
import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Controller;

import cn.itcast.bos.utils.MailUtils;
import cn.itcast.bos.web.action.commom.BaseAction;
import cn.itcast.crm.domain.Customer;

@ParentPackage("json-default")
@Namespace("/")
@Controller
@Scope("prototype")
public class CustomerAction extends BaseAction<Customer> {
	@Action(value="customer_sendSms")
	public String sendSms() throws UnsupportedEncodingException{
		String randomCode = RandomStringUtils.randomNumeric(4);
			ServletActionContext.getRequest().getSession().setAttribute(model.getTelephone(), randomCode);
			/*String result = SmsUtils.sendSmsByHTTP(model.getTelephone(), "尊敬的用户您好，本次获取的验证码为："
					 + randomCode + ",服务电话：4006184000");*/
			final String msg ="尊敬的用户您好，本次获取的验证码为:" + randomCode + ",服务电话：4006184000)";
					
			jmsTemplate.send("bos_sms", new MessageCreator() {
				
				@Override
				public Message createMessage(Session session) throws JMSException {
					MapMessage mapMessage = session.createMapMessage();
					mapMessage.setString("telephone", model.getTelephone());
					mapMessage.setString("msg", msg);
					return mapMessage;
				}
			});
			return NONE;
			/*String result = "0001";
			System.out.println(randomCode);
			if (result.startsWith("000")) {
				return NONE;
			}else{
				throw new RuntimeException("短信发送失败,信息码:"+result);
			}*/
		 
		
	}
	private String checkcode;
	
	public void setCheckcode(String checkcode) {
		this.checkcode = checkcode;
	}
	@Autowired
	@Qualifier("jmsQueueTemplate")
	private JmsTemplate jmsTemplate;
	
	@Autowired
	RedisTemplate<String, String> redisTemplate;
	@Action(value="customer_regist",results={@Result(name="success",type="redirect",location="./signup-success.html"),
			@Result(name="input",type="redirect",location="signup.html")})
	public String regist(){
		//校验验证码
		String checkCodeSession = (String) ServletActionContext.getRequest().getSession().getAttribute(model.getTelephone());
		if(checkCodeSession==null||!checkCodeSession.equals(checkcode)){
			return INPUT;
		}
		WebClient.create("http://localhost:9090/services/customerService/customer").type(MediaType.APPLICATION_JSON).post(model);
		//发送一封邮箱绑定的邮件
		//生成激活码
		String randomCode = RandomStringUtils.randomNumeric(32);
		redisTemplate.opsForValue().set(model.getTelephone(), randomCode,24,TimeUnit.HOURS);
		String content ="客户您好,24小时内邮箱绑定,请点击<br/><a href='"+MailUtils.activeUrl+"?telephone="+model.getTelephone()+"&activecode="+randomCode+"'>速运快递绑定地址</a>";
		
		MailUtils.sendMail("速运快递激活邮件", content, model.getEmail());
		
		return SUCCESS;
		
	}
	private String activecode;
	
	public void setActivecode(String activecode) {
		this.activecode = activecode;
	}
	//邮箱激活激活码
	@Action(value="customer_activeMail")
	public String activeMail() throws IOException{
		ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
		String activecoderedis = redisTemplate.opsForValue().get(model.getTelephone());
		
		if (activecode==null||!activecode.equals(activecoderedis)) {
			ServletActionContext.getResponse().getWriter().print("激活码无效");
		}else{
			Customer customer = WebClient.create
			("http://localhost:9090/services/customerService/customer/telephone/"
			+model.getTelephone()).accept(MediaType.APPLICATION_JSON).get(Customer.class);
			//判断是否重复绑定
			if (customer.getType()==null||customer.getType()!=1) {
				WebClient.create("http://localhost:9090/services/customerService/customer/updateType/"
						+model.getTelephone()).put(null);
				ServletActionContext.getResponse().getWriter().print("绑定成功");
			}else{
				ServletActionContext.getResponse().getWriter().print("已经绑定过,无需重复绑定");
			}
		}
		//删除redis中激活码
		redisTemplate.delete(model.getTelephone());
		return NONE;
	}
	@Action(value="customer_login",results={@Result(name="login",location="login.html",type="redirect"),
			@Result(name="success",location="index.html#/myhome",type="redirect")})
	public String login(){
		Customer customer = WebClient.create("http://localhost:9090/services/customerService/customer/login?telephone="+model.getTelephone()+"&password="+model.getPassword())
		.accept(MediaType.APPLICATION_JSON).get(Customer.class);
		if (customer==null) {
			return LOGIN;
		}else{
		ServletActionContext.getRequest().getSession().setAttribute("customer", customer);
		return SUCCESS;
		}
	}
}
